home *** CD-ROM | disk | FTP | other *** search
/ Inverse 10 / Inverse_10_2002-06-20_Oxygen_Side_A.d64 / z assem 5 - pack < prev    next >
Text File  |  2023-02-26  |  11KB  |  644 lines

  1.          *= $1000
  2.  
  3. source   = $2000
  4. table    = $5000
  5. dest     = $7000
  6.  
  7. sor      = $fa
  8. sqr      = $fc
  9. sim      = $fe
  10.  
  11.  
  12.          ldx #0
  13.          stx bajt{CBM-@}b
  14.  
  15.          jsr init{CBM-@}par
  16.          jsr reset{CBM-@}val
  17.          jsr multiply{CBM-@}3;adres koncowy
  18. ;---------------------------------------
  19. a0
  20.          lda sor+1
  21.          cmp sour{CBM-@}e{CBM-@}hi
  22.          bne a00
  23.  
  24.          lda sor
  25.          cmp sour{CBM-@}e{CBM-@}lo
  26.          bne a00
  27.  
  28.          lda #$01   ;znacznik konca
  29.          sta bajt{CBM-@}b ;obiegu
  30.  
  31.          lda string{CBM-@}l
  32.          beq *+10     ;pojedynczy bajt!
  33.          cmp usage{CBM-@}p
  34.          bcs b1       ;pakowanie
  35.          jsr inc{CBM-@}sor
  36.          jmp a11      ;nie oplaca sie!
  37.  
  38.        ; inc $d020
  39.          jsr inc{CBM-@}sor
  40.          jmp unnake   ;koniec
  41.  
  42. a00
  43.          ldy #0
  44.  
  45.          lda (sor),y
  46.          cmp store
  47.          bne a1
  48.          lda string{CBM-@}l
  49.          cmp #$ff
  50.          beq a1
  51.          inc string{CBM-@}l
  52.          jsr inc{CBM-@}sor
  53.          jmp a0
  54. a1
  55.          sta store ;nowa wartosc!
  56.          jsr inc{CBM-@}sor
  57.          lda string{CBM-@}l
  58.          beq a0      ;pojedynczy bajt
  59.          cmp usage{CBM-@}p ;ilosc powtorzen
  60.          bcs b1      ;mozna pakowac!
  61. a11
  62.          lda string{CBM-@}l ;nie oplaca sie
  63.          tax          ;pakowac!
  64.          dex
  65.          txa
  66.          clc
  67.          adc sor
  68.          sta sor
  69.          bcc *+4
  70.          inc sor+1
  71.          lda #0
  72.          sta string{CBM-@}l
  73.  
  74.          lda bajt{CBM-@}b ;juz po pakowaniu,
  75.          beq rtv    ;liczniki musza sie
  76.                     ;zgadzac!!!
  77.          jsr dec{CBM-@}sor
  78. rtv
  79.          lda sor+1
  80.          cmp sour{CBM-@}e{CBM-@}hi
  81.          bne continue
  82.  
  83.          lda sor
  84.          cmp sour{CBM-@}e{CBM-@}lo
  85.          bne continue
  86.  
  87.        ; inc $d020   ;koniec!!!
  88.          jmp unnake
  89. continue
  90.          jmp a0
  91. ;---------------------------------------
  92. ;procedura do pakowania bajtow
  93. b1
  94.          lda sor
  95.          sec
  96.          sbc string{CBM-@}l
  97.          sta sor
  98.          bcs *+4
  99.          dec sor+1
  100.  
  101.          lda sor
  102.          sec
  103.          sbc #1
  104.          sta sor
  105.          bcs *+4
  106.          dec sor+1
  107.  
  108.          jsr stack{CBM-@}to
  109.  
  110.          lda sour{CBM-@}e{CBM-@}lo
  111.          sec
  112.          sbc string{CBM-@}l
  113.          sta sour{CBM-@}e{CBM-@}lo
  114.          bcs *+5
  115.          dec sour{CBM-@}e{CBM-@}hi
  116.  
  117.          jsr multiply{CBM-@}3
  118.  
  119.          lda sqr
  120.          sta sim
  121.          lda sqr+1
  122.          sta sim+1
  123.  
  124.        ; lda sour{CBM-@}e{CBM-@}hi
  125.        ; sta sim+1
  126.        ; lda sour{CBM-@}e{CBM-@}lo ;skad (w dol)
  127.        ; clc
  128.        ; adc #3    ;wartosc etykiety
  129.        ; sta sim   ;tab{CBM-@}e(lo/hi) by
  130.        ; bcc *+4   ;nic nie pominac
  131.        ; inc sim+1 ;przy przenoszeniu
  132.  
  133.       ;  lda #$00   ;dokad
  134.       ;  sta sor
  135.       ;  lda #$09
  136.       ;  sta sor+1
  137.  
  138.          lda string{CBM-@}l ;parametr 'move'
  139.          sta bajt{CBM-@}a
  140.  
  141.          jsr move{CBM-@}mem{CBM-@}sbc
  142.  
  143.          jsr stack{CBM-@}from
  144.  
  145.        ; lda tab{CBM-@}e{CBM-@}lo
  146.        ; clc
  147.        ; adc #3
  148.        ; sta tab{CBM-@}e{CBM-@}lo
  149.        ; bcc *+5
  150.        ; inc tab{CBM-@}e{CBM-@}hi
  151.  
  152.          jsr multiply{CBM-@}3
  153.  
  154.          ldy #0     ;adres+wartosc
  155.          lda sor    ;do tabeli
  156.          sta (sqr),y
  157.          iny
  158.          lda sor+1
  159.          sta (sqr),y
  160.          iny
  161.          lda string{CBM-@}l
  162.          sta (sqr),y
  163.  
  164.          lda bajt{CBM-@}b
  165.          bne k00
  166.  
  167.          ldy #0
  168.          lda (sqr),y
  169.          sec
  170.          sbc #1
  171.          sta (sqr),y
  172.          bcs k00
  173.          iny
  174.          lda (sqr),y
  175.          sec
  176.          sbc #1
  177.          sta (sqr),y
  178. k00
  179.          inc pack{CBM-@}lenght
  180.          bne *+5
  181.          inc pack{CBM-@}lenght+1
  182.  
  183.          lda #0
  184.          sta string{CBM-@}l
  185.  
  186.          lda sour{CBM-@}e{CBM-@}lo
  187.          sta $0e00
  188.          lda sour{CBM-@}e{CBM-@}hi
  189.          sta $0e01
  190.  
  191.          lda store
  192.          sta $0f00
  193.  
  194.          jsr inc{CBM-@}sor
  195.  
  196.          lda sor+1
  197.          cmp sour{CBM-@}e{CBM-@}hi
  198.          bne next{CBM-@}one
  199.  
  200.          lda sor
  201.          cmp sour{CBM-@}e{CBM-@}lo
  202.          bne next{CBM-@}one
  203.  
  204.          lda bajt{CBM-@}b   ;koniec tutaj _
  205.          bne ok{CBM-@}      ;musi zostac
  206.                       ;wyrownany adres
  207.          ldy #0       ;w tabeli (zasto-
  208.          lda (sqr),y  ;sowanie etykiety
  209.          clc          ;jsr inc{CBM-@}sor)
  210.          adc #1
  211.          sta (sqr),y
  212.          bcc ok{CBM-@}
  213.          iny
  214.          lda (sqr),y
  215.          clc
  216.          adc #1
  217.          sta (sqr),y
  218. ok{CBM-@}
  219.       ;  inc $d020    ;koniec!!!
  220.          jmp unnake
  221.  
  222. next{CBM-@}one
  223.          jmp a0
  224.          ;+++++++++++++++
  225. unnake
  226.          lda sqr  ;koncowy adres
  227.          clc      ;spakowanego progra-
  228.          adc #3   ;mu
  229.          sta sqr
  230.          bcc *+4
  231.          inc sqr+1
  232.          ldy #0
  233.          lda sour{CBM-@}e{CBM-@}lo
  234.          sta (sqr),y
  235.          iny
  236.          lda sour{CBM-@}e{CBM-@}hi
  237.          sta (sqr),y
  238.          iny
  239.          lda pack{CBM-@}lenght
  240.          sta (sqr),y
  241.          iny
  242.          lda pack{CBM-@}lenght+1
  243.          sta (sqr),y
  244.          iny
  245.          tya
  246.          clc
  247.          adc sqr
  248.          sta sqr
  249.          bcc *+4
  250.          inc sqr+1 ;adres konca pliku!
  251.  
  252.       ;  inc $d020
  253.       ;  jmp *-3   ;koniec!
  254.  
  255.  
  256.          jmp kamela
  257. ;---------------------------------------
  258. maxym
  259.          lda #$dd
  260.          sta pack{CBM-@}lenght
  261.          lda #$00
  262.          sta pack{CBM-@}lenght+1
  263.          lda #$da
  264.          sta sor
  265.          lda #$25
  266.          sta sor+1
  267.          lda #$75
  268.          sta sqr
  269.          lda #$28
  270.          sta sqr+1
  271.  
  272.  
  273. kamela
  274.  
  275. ;procedura do kasowania bajtow z tablicy
  276.  
  277.          ldy #$00
  278.          sty bajt{CBM-@}b ;licznik
  279.          sty store  ;wartosc byte{CBM-@}hi
  280.          sty string{CBM-@}l;ile lancuchow?
  281.  
  282.          lda #$01   ;przesuniecie
  283.          sta bajt{CBM-@}a
  284.  
  285.          lda sour{CBM-@}e{CBM-@}lo ;poczatek
  286.          sta sor
  287.          lda sour{CBM-@}e{CBM-@}hi
  288.          sta sor+1
  289.  
  290.          lda sqr      ;koniec
  291.          sta sim
  292.          lda sqr+1
  293.          sta sim+1
  294.  
  295.          lda pack{CBM-@}lenght;czy wystapilo
  296.          bne fg0        ;pakowanie?
  297.          lda pack{CBM-@}lenght+1
  298.          bne fg0
  299.          lda #$00
  300.          sta (sim),y
  301.          rts          ;koniec
  302. fg0
  303.          jsr inc{CBM-@}sor
  304.          lda (sor),y
  305.          sta store
  306.  
  307.          ;+++++++++++
  308. xt3
  309.          ldy #0
  310.          lda (sor),y
  311.          cmp store
  312.          bne new{CBM-@}one
  313.       ;  sta (sim),y
  314.          inc bajt{CBM-@}b ;licznik
  315.  
  316.          jsr stack{CBM-@}to
  317.  
  318.          jsr move{CBM-@}mem{CBM-@}sbc
  319.  
  320.          jsr stack{CBM-@}from
  321.  
  322.          jsr dec{CBM-@}sim
  323.          jsr inc{CBM-@}sor
  324.          jsr inc{CBM-@}sor
  325.  
  326.          lda pack{CBM-@}lenght
  327.          sec
  328.          sbc #1
  329.          sta pack{CBM-@}lenght
  330.          bcs *+5
  331.          dec pack{CBM-@}lenght+1
  332.  
  333.          lda pack{CBM-@}lenght
  334.          bne xt3
  335.          lda pack{CBM-@}lenght+1
  336.          bne xt3
  337.  
  338.          ;++++++++++++
  339.          lda bajt{CBM-@}b   ;licznik konca
  340.          sta (sim),y
  341.  
  342.          jsr inc{CBM-@}sim
  343.  
  344.          inc string{CBM-@}l;ostatnia kolejka!
  345.  
  346.          lda string{CBM-@}l
  347.          sta $0e00
  348.          sta (sim),y  ;koniec!!!!!!
  349.  
  350.          jsr inc{CBM-@}sim
  351.  
  352.          rts
  353.          ;+++++++++++++
  354. new{CBM-@}one
  355.          tax
  356.  
  357.          lda string{CBM-@}l
  358.          bne uj32     ;pierwszy raz
  359.  
  360.          lda store    ;stara wartosc
  361.          sta (sim),y
  362.  
  363.          jsr inc{CBM-@}sim
  364.  
  365. uj32
  366.          txa
  367.          sta store    ;nowa wartosc
  368.  
  369.          inc string{CBM-@}l
  370.  
  371.          lda bajt{CBM-@}b   ;stary licznik
  372.          sta (sim),y
  373.  
  374.          jsr inc{CBM-@}sim ;do nastepnego
  375.  
  376.          lda #$00
  377.          sta bajt{CBM-@}b
  378.  
  379.          jmp xt3
  380. ;+++++++++++++++++++++++++++++++++++++++
  381. dec{CBM-@}sim
  382.          lda sim
  383.          sec
  384.          sbc #1
  385.          sta sim
  386.          bcs *+4
  387.          dec sim+1
  388.          rts
  389.          ;+++++++++
  390. inc{CBM-@}sim
  391.          lda sim
  392.          clc
  393.          adc #1
  394.          sta sim
  395.          bcc *+4
  396.          inc sim+1
  397.          rts
  398.          ;+++++++++
  399. multiply{CBM-@}3
  400.        ; lda #<table
  401.          lda sour{CBM-@}e{CBM-@}lo
  402.          sta sqr
  403.        ; lda #>table
  404.          lda sour{CBM-@}e{CBM-@}hi
  405.          sta sqr+1
  406.  
  407.          lda pack{CBM-@}lenght
  408.          clc
  409.          adc sqr
  410.          sta sqr
  411.          bcc *+4
  412.          inc sqr+1
  413.          lda pack{CBM-@}lenght+1
  414.          clc
  415.          adc sqr+1
  416.          sta sqr+1
  417.  
  418.          lda pack{CBM-@}lenght
  419.          clc
  420.          adc sqr
  421.          sta sqr
  422.          bcc *+4
  423.          inc sqr+1
  424.          lda pack{CBM-@}lenght+1
  425.          clc
  426.          adc sqr+1
  427.          sta sqr+1
  428.  
  429.          lda pack{CBM-@}lenght
  430.          clc
  431.          adc sqr
  432.          sta sqr
  433.          bcc *+4
  434.          inc sqr+1
  435.          lda pack{CBM-@}lenght+1
  436.          clc
  437.          adc sqr+1
  438.          sta sqr+1
  439.  
  440.          rts
  441. ;---------------------------------------
  442. init{CBM-@}par
  443.          lda #<source
  444.          sta sor
  445.          lda #>source
  446.          sta sor+1
  447.          lda #<dest
  448.          sta sim
  449.          lda #>dest
  450.          sta sim+1
  451.          rts
  452. ;---------------------------------------
  453. reset{CBM-@}val
  454.          lda #$2f      ;przyklad!
  455.          sta sour{CBM-@}e{CBM-@}lo
  456.          lda #$43      ;przyklad!
  457.          sta sour{CBM-@}e{CBM-@}hi
  458.          lda #0
  459.          sta string{CBM-@}l
  460.          lda sour{CBM-@}e{CBM-@}lo
  461.          sta tab{CBM-@}s{CBM-@}lo
  462.          sta tab{CBM-@}e{CBM-@}lo
  463.          lda sour{CBM-@}e{CBM-@}hi
  464.          sta tab{CBM-@}s{CBM-@}hi
  465.          sta tab{CBM-@}e{CBM-@}hi
  466.          lda #<source
  467.          sta sour{CBM-@}s{CBM-@}lo
  468.          lda #>source
  469.          sta sour{CBM-@}s{CBM-@}hi
  470. init{CBM-@}store
  471.          ldy #0
  472.          lda (sor),y
  473.      ;   eor #%00000001
  474.          sta store
  475.          rts
  476. ;---------------------------------------
  477. move{CBM-@}mem{CBM-@}add
  478.  
  479.          lda #$00   ;skad (w gore)
  480.          sta sim
  481.          lda #$09
  482.          sta sim+1
  483.  
  484.          lda #$00   ;dokad
  485.          sta sor
  486.          lda #$0a
  487.          sta sor+1
  488.  
  489.          lda #16   ;parametr 'move'
  490.          sta bajt{CBM-@}a
  491.  
  492.          ;
  493.  
  494.          lda sor+1
  495.          sta sqr+1
  496.  
  497.          lda sor
  498.          sec
  499.          sbc bajt{CBM-@}a
  500.          sta sqr
  501.          bcs *+4
  502.          dec sqr+1
  503.  
  504.          ldy #0
  505. j1
  506.          lda (sqr),y
  507.          sta (sor),y
  508.  
  509.          jsr dec{CBM-@}sqr
  510.          jsr dec{CBM-@}sor
  511.  
  512.          lda sor+1
  513.          cmp sim+1
  514.          bne j1
  515.  
  516.          lda sor
  517.          cmp sim
  518.          bne j1
  519.          rts
  520.          ;++++++++++
  521. dec{CBM-@}sqr
  522.          lda sqr
  523.          sec
  524.          sbc #1
  525.          sta sqr
  526.          bcs *+4
  527.          dec sqr+1
  528.          rts
  529.          ;++++++++++
  530. dec{CBM-@}sor
  531.          lda sor
  532.          sec
  533.          sbc #1
  534.          sta sor
  535.          bcs *+4
  536.          dec sor+1
  537.          rts
  538. ;---------------------------------------
  539. move{CBM-@}mem{CBM-@}sbc
  540.       ;  lda #$00   ;skad (w dol)
  541.       ;  sta sim
  542.       ;  lda #$0a
  543.       ;  sta sim+1
  544.  
  545.       ;  lda #$00   ;dokad
  546.       ;  sta sor
  547.       ;  lda #$09
  548.       ;  sta sor+1
  549.  
  550.       ;  lda #16   ;parametr 'move'
  551.       ;  sta bajt{CBM-@}a
  552. j2
  553.          ldy bajt{CBM-@}a
  554.          lda (sor),y
  555.          ldy #0
  556.          sta (sor),y
  557.  
  558.          jsr inc{CBM-@}sor
  559.  
  560.          lda sor+1
  561.          cmp sim+1
  562.          bne j2
  563.  
  564.          lda sor
  565.          cmp sim
  566.          bne j2
  567.  
  568.          rts
  569.          ;++++++++++
  570. inc{CBM-@}sor
  571.          lda sor
  572.          clc
  573.          adc #1
  574.          sta sor
  575.          bcc *+4
  576.          inc sor+1
  577.          rts
  578. ;---------------------------------------
  579. stack{CBM-@}to
  580.          lda sor
  581.          sta stack
  582.          lda sor+1
  583.          sta stack+1
  584.          lda sqr
  585.          sta stack+2
  586.          lda sqr+1
  587.          sta stack+3
  588.          lda sim
  589.          sta stack+4
  590.          lda sim+1
  591.          sta stack+5
  592.          rts
  593. ;---------------------------------------
  594. stack{CBM-@}from
  595.          lda stack
  596.          sta sor
  597.          lda stack+1
  598.          sta sor+1
  599.          lda stack+2
  600.          sta sqr
  601.          lda stack+3
  602.          sta sqr+1
  603.          lda stack+4
  604.          sta sim
  605.          lda stack+5
  606.          sta sim+1
  607.          rts
  608. ;---------------------------------------
  609. ;zmienne srodowiskowe
  610. string{CBM-@}l
  611.          .byte $00
  612. store
  613.          .byte $00
  614. bajt{CBM-@}a
  615.          .byte $00
  616. bajt{CBM-@}b
  617.          .byte $00
  618. ;---------------------------------------
  619. ;zmienne globalne
  620. pack{CBM-@}lenght
  621.          .byte $00,$00
  622. usage{CBM-@}p
  623.          .byte $04
  624. tab{CBM-@}s{CBM-@}lo
  625.          .byte $00
  626. tab{CBM-@}s{CBM-@}hi
  627.          .byte $00
  628. tab{CBM-@}e{CBM-@}lo
  629.          .byte $00
  630. tab{CBM-@}e{CBM-@}hi
  631.          .byte $00
  632. sour{CBM-@}s{CBM-@}lo
  633.          .byte $00
  634. sour{CBM-@}s{CBM-@}hi
  635.          .byte $00
  636. sour{CBM-@}e{CBM-@}lo
  637.          .byte $00
  638. sour{CBM-@}e{CBM-@}hi
  639.          .byte $00
  640. stack
  641.          .byte $00,$00,$00,$00,$00,$00
  642.          .byte $00,$00,$00,$00,$00,$00
  643.  
  644.